import helpers
import argparse
import algoritmo as ga
import random

def run(args):
    genes = helpers.get_genes_from('cidades.txt')
    print("[*] Executando com {} cidades...".format(len(genes)))
    history = ga.run_ga(genes, args.pop_size, args.n_gen, args.tourn_size, args.mut_rate)

    # print(history['route'].genes[0].name)
    print("\nRota:", end=' ')
    for i in range(0, len(history['route'].genes)):
        if(i == len(history['route'].genes)-1):
            print(history['route'].genes[i].id)
        else:
            print("{} ==> ".format(history['route'].genes[i].id), end='')

    print("Histórico de custos (km):", history['cost'], end='\n\n')
    print("[!] Fim!")


if __name__ == "__main__":
    helpers.read()
    parser = argparse.ArgumentParser()

    parser.add_argument('--pop_size', type=int, default=6, help='Tamanho de cada geração')
    parser.add_argument('--tourn_size', type=int, default=2, help='Tamanho de cada torneio')
    parser.add_argument('--mut_rate', type=float, default=0.05, help='Taxa de mutação')
    parser.add_argument('--n_gen', type=int, default=5, help='Número limite de gerações iguais ou piores.')

    # random.seed(datetime.now())
    random.seed()
    args = parser.parse_args()

    if args.tourn_size > args.pop_size:
        raise argparse.ArgumentTypeError('Tournament size cannot be bigger than population size.')

    run(args)